Skip to content

dotnetup walkthrough - ux & graphical improvements#53464

Draft
nagilson wants to merge 50 commits intodotnet:release/dnupfrom
nagilson:nagilson-dnup-walkthrough-ux
Draft

dotnetup walkthrough - ux & graphical improvements#53464
nagilson wants to merge 50 commits intodotnet:release/dnupfrom
nagilson:nagilson-dnup-walkthrough-ux

Conversation

@nagilson
Copy link
Member

@nagilson nagilson commented Mar 14, 2026

Changes

  1. Running 'dotnetup' should initiate the walkthrough instead of exiting
  2. Double-clicking the dotnetup executable should not make it immediately bail out
  3. Add a dotnetup.config.json file which stores the decisions users made in the walkthrough so we don't ask every time
  4. Add interactivity to selecting the default install option and add the dotnetup dotnet option (Resolves dotnetup: By default, don't modify admin PATH on Windows #53076)
  5. Don't ask the user every time what version to install, Resolves dotnetup: Remove prompt for channel to install #53282
  6. Don't ask the user every time where to do the install
  7. Start predownloading in the walkthrough for what we'll need to install later (Resolves Consider Pre-Downloading in dotnetup walkthrough #52643)
  8. Add the dotnetup walkthrough command to enable changing the configuration again later (
    Resolves Separate dotnetup interactive / noninteractive modes #51584)
  9. Fix ordering and grouping of dotnetup --help
  10. Improve spacing/wording/padding and remove instances of raw json data / data structures being dumped into the terminal
  11. Add dotnetup theme command to add themes
  12. Unify colors and make colors align with .net branding (purple colors)
  13. Improvements to admin installs walkthrough (resolves
    Resolves DNUP Admin Installs -> Local Installs #51101)
  14. Improvements to selection mode ui
  15. Introduction Graphic Display
  16. Adds concurrent installs and concurrent progress graphics (resolves Resolves Support dotnetup runtime install installing multiple things #52679)
  17. Shimmer animations
  18. Explanation of channels / getting started guide. (Resolves DNUP Initial Walkthrough #51100)
  19. Adds aliases 'aspnet' for aspnetcore, (Resolves dotnetup should probably accept "aspnet" as a specifier for the aspnetcore runtime #53283 )

nagilson and others added 30 commits January 12, 2026 11:39
We talked about  'shadowing' `dotnet` commands to allow users to ensure `dotnetup` always works until the product is fully integrated with `dotnet.exe` itself - such that the installers and visual studio are not able to break scenarios that rely on `dotnetup`.

I think that is important for us to provide.

This document is a first-pass on what it'd be like to actually implement that. The security portion in particular is interesting, and I'm less compelled by the proposal after trying to write it all out. Nonetheless, I wanted to see where it would take us were we to implement it. Which, I had to do some of the partial implementation so I could reason with how this would work, but that's not included here. That's in the branch `nagilson-shadow-dotnet`.

I'd appreciate having our team chat about this doc and whether we still want to do this or not, or whether there are changes that need to be made at a higher level.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1. Running 'dotnetup' should initiate the walkthrough instead of exiting
2. Double-clicking the dotnetup executable should not make it immediately bail out
3. Add a dotnetup.config.json file which stores the decisions users made in the walkthrough so we don't ask every time
4. Add interactivity to selecting the default install option and add the dotnetup dotnet option
5. Don't ask the user every time what version to install
6. Don't ask the user every time where to do the install
7. Start predownloading in the walkthrough for what we'll need to install later
8. Add the dotnetup walkthrough command to enable changing the configuration again later
9. Fix ordering and grouping of dotnetup --help
10. Improve spacing/wording/padding and remove instances of raw json data / data structures being dumped into the terminal
This analyzer helps prevent copilot from writing functions which are too long so it will naturally break them up into separate pieces.
Add dotnetup theme command to add themes
Unify colors and make colors align with .net branding (purple colors)
Improvements to admin installs walkthrough
Improvements to selection mode ui
Attempt at introductory box with dotnet bot graphic - seems buggy atm
Adds concurrent runtime installs
Also adds concurrent sdk install support scaffolding
fixes bug with path replacement
fixes bug with needing to enter to complete (bad design)
might be a problem if other text appears mid way through the install
nagilson added 11 commits March 16, 2026 10:49
We cant impelement our own as spectre.console is sealed in this class, there are too many optoins, we should instead defer the install of these installs to the end after setup of dotnetup so someone can get working. I tried to keep the code from before because I thought that formatting was clear and it is easier to make a y/n decision in this regard.
DotnetInstallRootConfiguration currentDotnetInstallRoot,
string resolvedInstallPath)
{
if (DotnetupUtilities.PathsEqual(resolvedInstallPath, currentDotnetInstallRoot.Path))
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All this function is supposed to do is decide whether or not we need to replace the default install. Please do not have any prompting or outputs.

/// Determines whether the installation should be set as the system default.
/// Checks the saved config first; only shows prompts when the config is absent.
/// </summary>
private static bool DeriveSetDefaultInstall(
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This logic is hard to follow, bloated, and includes differing conventions in the code. Default install could mean modifying the profile or it could mean modifying system PATH. We should only interface with a variable that contains the path preference from the user, which comes from a function in the walkthrough that gets the config or prompts if necessary. Then the walkthrough or somewhere else should have a function which returns whether to replace PATH (which is really about the path preference on windows being 1 value) and a function which returns whether to convertSystemInstalls (rather than the term 'admin') which returns that the path option is not != isolated.

@nagilson
Copy link
Member Author

Let's remove the 'theme' command for now and we can add that later, it's a little too much to add onto all of this. We can create a .md file as a github issue that links to the commit we have here with the theme command code as a great launch point. Let's also remove the dotnetup dotnet commits from this history / code so stuff is properly isolated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant